
import {fork, put,take,takeEvery,call,cps} from './redux-saga/effects';
import * as actionTypes from './action-types';

function delay(ms) {
    return new Promise((resolve) => {
        setTimeout(resolve, ms);
    });
}
function delayCB(ms,callback){
    setTimeout(() => {
        callback(null,'ok')
    }, ms);
}

export function* add() {
    // console.log('333333333')
    // yield delay(1000)

    //告诉中间件请调用一个方法，此方法一定会返回一个promise，会等带promise完成，继续向下执行saga
    // yield call(delay,1000) //{ type:'CALL',fn:delay,args:[1000] }

    let data =  yield cps(delayCB,1000)
    console.log('data',data)
    console.log('222222222')

    yield put({ type: actionTypes.ADD }); //{ type:'PUT',action:'ADD' }
}

export default function* rootSaga() {
    // 开启一个新的子进程，运行add这个saga
    // 这个所谓的子进程只是一个比喻，add会立刻单独执行，不会阻塞当前的saga向下执行
    // yield fork(add) //{ type:'FORK',saga:add }
    // console.log('11111111111')

    // 监听每一次的ASYNC_ADD动作派发，去开启一个子进程，执行对应的saga
    yield takeEvery(actionTypes.ASYNC_ADD,add) //{ type:'ASYNC_ADD',saga:add }
}